<?php
/*
 * 组合策略
 * 将一组对象组合成为可像单个对象一样被使用 的结构。
 * 组合模式帮组我们聚合组件。
 * Adair 2021-10-11
 * 一款文明游戏
 * Army(军队),TroopCarrier(运兵车), 组合对象
 * Archer(弓箭手),LaserCanonUnit(激光炮),是局部对象
 * 组合模式不能很好的在关系数据库中保存数据，但非常适用于XML持久化。
*/
function my_autoloader($class) {
    //var_dump($class);
    include $class . '.php';
}
spl_autoload_register('my_autoloader');
$res = UnitScript::joinExisting(new Archer(),new LaserCanonUnit());

//$res = UnitScript::joinExisting(new TroopCarrier(),new LaserCanonUnit());





//创建一个Army对象
$main_army = new Army();

//添加一些Unit对象
$main_army->addUnit( new Archer() );
$main_army->addUnit( new LaserCanonUnit() );


//创建一个新的Army对象
$sub_army  =  new Army();
//添加一些Unit对象
$sub_army->addUnit( new Archer());
$sub_army->addUnit( new Archer());
$sub_army->addUnit( new Archer());


//把第二个Army对象添加到第一个Army对象中去
$main_army->addUnit($sub_army);

//所有的攻击强度计算都在幕后进行
print "main_army 攻击强度：{$main_army->bombardStrength()}\n<BR />";
print "sub_army 攻击强度：{$sub_army->bombardStrength()}\n<BR />";